#define DEBUG
#include <cstdio>

using namespace std;

const int maxm=5000, maxk=2001, mods=998244353;

long long fact[maxm*maxk+1], unfact[maxm*maxk+1];

long long qpower(long long a, long long n) {
  long long s=1;
  for (; n>1; n/=2) {
    if (n%2) {
      s = s*a%mods;
    }
    a = a*a%mods;
  }
  return a*s%mods;
}

void initFact(int n) {
  fact[0] = 1;
  for (int i=1; i<=n; i++) {
    fact[i] = fact[i-1]*i%mods;
  }
  unfact[n] = qpower(fact[n], mods-2);
  for (int i=n; i>0; i--) {
    unfact[i-1] = unfact[i]*i%mods;
  }
}

long long c(long long n, long long m) {
  if (n<m) {
    return 0;
  } else if (n<=maxk*maxm+1 && m<=maxk*maxm+1) {
    return fact[n]*unfact[m]%mods*unfact[n-m]%mods;
  } else {
    long long ret=unfact[m];
    for (int i=0; i<m; i++) {
      ret = ret*((n-i)%mods)%mods;
    }
    return ret;
  }
}

int main() {
  freopen("count.in", "r", stdin);
  freopen("count.out", "w", stdout);


  long long n;
  int m, k;
  scanf("%lld %d %d", &n, &m, &k);
  initFact(maxk*maxm+1);

  long long ans=0;
  for (int i=n%m; i<=k*(m-1) && i<=n; i+=m) {
    long long now=0;
    int t=i/m;
    for (int j=0, f=1; j<=t; j++, f=-f) {
      now = (now+mods+f*(c(k, j)*c(i-j*(m-1)-1, k-1)%mods))%mods;
    }
    ans = (ans+now*c(n/m-t+k-1, k-1)%mods)%mods;
  }
  printf("%lld", ans);

  fclose(stdin);
  fclose(stdout);
  return 0;
}
